package com.itheima.service.Impl;

import com.itheima.dao.CheckItemDao;
import com.itheima.entity.PageResult;
import com.itheima.health.pojo.QueryPageBean;
import com.itheima.health.pojo.CheckItem;
import com.itheima.service.CheckItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional
public class CheckItemServiceImpl implements CheckItemService {
    @Autowired
    private CheckItemDao dao;

    /**
     * 添加检查项
     * @param checkItem
     * @return
     */
    @Override
    public int add(CheckItem checkItem) {
        return dao.add(checkItem);
    }

    /**
     * 查询检查项
     * @param queryPageBean
     * @return
     */
    @Override
    public PageResult<CheckItem> findPage(QueryPageBean queryPageBean) {
         /*
            一般来说，service层的返回值，一般都是由dao层提供的。但是咋这里dao层没有办法提供PageResult。
            因为dao层其实也是去查询数据库要的数据，数据库是真没有办法提供PageResult..
            这里就需要我们手动封装了
         */
        //总记录数
        long total = dao.findCount(queryPageBean);
        //当前页的集合数据
        List<CheckItem> rows = dao.findPage(queryPageBean);

        return  new PageResult<CheckItem>(total,rows);

    }

    /**
     * 删除检查项
     *  1. 不能像以前一样，直接上来就删除数据，需要做判断。
     *  如果检查项现在被某一个检查组所使用，那么禁止删除这个检查项
     * @param id
     * @return
     */
    @Override
    public int delete(int id) {

        //1.先检查这个检查项有没有被检查组使用了
        int row = dao.findCountById(id);
        if (row > 0) {
            //表示这个检查项被检查组使用到了，那不能删除
            return 0;
        } else {
            //没有就执行删除操作
            return dao.delete(id);
        }
    }

    /**
     * 编辑检查项
     * @param checkItem
     * @return
     */
    @Override
    public int update(CheckItem checkItem) {
        return dao.update(checkItem);
    }

    /**
     * 查询所有的检查项
     * @return
     */
    @Override
    public List<CheckItem> findAll() {

        return  dao.findAll();
    }
}
